/**
 * @(#)${NAME}.java Jan 31, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : AngelElectrico
 * <br/>Creaci&oacute;n: Jan 31, 2007 - 9:35:15 PM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Jan 31, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a> | Creaci&oacute;n del Objeto.</li>

 * <li>Abr 2, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a> | Se cambi&oacute; el prefijo Manager por Manager.</li>*
 * </ul>
 */

package com.psiqueware.alheli.id.manager;

import com.psiqueware.alheli.dao.EnlaceTransaccional;
import com.psiqueware.alheli.id.IdManager;
import com.psiqueware.alheli.id.Identificacion;
import com.psiqueware.alheli.id.Usuario;
import com.psiqueware.alheli.id.UsuariosManager;
import com.psiqueware.alheli.logging.Logger;
import com.psiqueware.alheli.logging.LoggerFactory;
import junit.framework.JUnit4TestAdapter;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;

/**
 * Conjunto Pruebas Unitarias para la clase IdManager.
 * <br/>Paquete Original: com.psiqueware.basico.id.manager
 * <br/>Nombre  Original: AutentificadorManagerTest
 * <br/><a href="AutentificadorManagerTest.java.html"><i>Ver C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a>
 * @version Revision: 1.1 Jan 31, 2007 9:35:15 PM
 * @noinspection DuplicateThrows
 */
public final class AutentificadorManagerTest extends TestCase
{

    /**
     * Logger de clase para DecoradorTManagerKTest
     */
    private static final Logger s_log = LoggerFactory.getLogger(AutentificadorManagerTest.class);


    /**
     * Objeto que se esta probando
     */
    private IdManager m_pruebame = null;

    private static final String USERNAME = "Nick User";

    private UsuariosManager m_pruebame2;

    /**
     * Construye una AutentificadorManagerTest.
     * <p>No requiere argumentos.</p>
     */
    public AutentificadorManagerTest()
    {
    }

    /**
     * Agregamos la clase al Runner de JUnit.
     */
    public static junit.framework.Test suite()
    {
        return new JUnit4TestAdapter(AutentificadorManagerTest.class);
    }

    EnlaceTransaccional enlaceTransaccional;

    /**
     * Creamos el grupo de objetos necesarios para correr la prueba.
     */
    @Before
    public void setUp() throws Exception
    {
        m_pruebame = new IdManagerK();
        m_pruebame2 = new UsuariosManagerK();
        enlaceTransaccional = m_pruebame.nuevoEnlace();
        enlaceTransaccional.iniciaTransaccion();
        super.setUp();
    }

    /**
     * Eliminamos los objetos creados.
     */
    @After
    public void tearDown() throws Exception
    {
        enlaceTransaccional.finalizaTransaccion();
        super.tearDown();
    }

    private static String s_activacion;

    private static String s_identificacion = "UsuarioPruebaK";

    private static String s_autentificacion = "PasswordUsuarioPrueba";

    /**
     * Realiza pruebas unitarias sobre la operaci&oacute;n {@code nuevoUsuario}.
     *
     * @throws Exception propagando cualquier excepci&oacute;n del m&eacute;todo.
     * @noinspection FeatureEnvy
     */
    public void testnuevoUsuario() throws Exception
    {
        if (s_log.isDebugEnabled()) s_log.debug("Probando: nuevoUsuario");
        final Usuario usuario = m_pruebame2.nuevoUsuario(USERNAME, null, USERNAME, enlaceTransaccional);
        Assert.assertNull("El valor de 'usuario.getClave()' deb&iacute;a ser nulo.", usuario.getClave());
        Assert.assertNotNull("El valor de 'usuario.getTitulo()' no deb&iacute;a ser nulo.", usuario.getTitulo());
        Assert.assertNotNull("El valor de 'usuario.getIdentificacion()' no deb&iacute;a ser nulo.", usuario.getIdentificacion());
        Assert.assertEquals("La identificaci&oacute;n no coincide.", USERNAME, usuario.getIdentificacion());
        Assert.assertEquals("El t&iacute;tulo no coincide.", USERNAME, usuario.getTitulo());

        boolean botoExcepcion = false;
        try
        {
            m_pruebame2.nuevoUsuario(USERNAME, null, USERNAME, enlaceTransaccional);
        }
        catch (Exception e)
        {
            botoExcepcion = true;
        }
        assertTrue("El m&eacute;todo no impidi&oacute; que se repitiera una Identificacion.", botoExcepcion);


        final Identificacion identificacion = m_pruebame2.nuevoUsuario(s_identificacion, s_autentificacion.toCharArray(), USERNAME, null, enlaceTransaccional);
        s_activacion = identificacion.getClaveActivacion();

        Assert.assertNotNull("El valor de 'identificacion' no deb&iacute;a ser nulo.", identificacion);
        Assert.assertNotNull("El valor de 'identificacion.getUsuario()' no deb&iacute;a ser nulo.", identificacion.getUsuario());
        Assert.assertEquals("La identificacion del identificacion no coincide", s_identificacion, identificacion.getIdentificacion());
        Assert.assertNotNull("El valor de 'identificacion.getUsuario().getClave()' no deb&iacute;a ser nulo.", identificacion.getUsuario().getClave());
        Assert.assertNull("El valor de 'identificacion.getUsuario().getTitulo()' deb&iacute;a ser nulo.", identificacion.getUsuario().getTitulo());


    }

    /**
     * Realiza pruebas unitarias sobre la operaci&oacute;n {@code isIdentificacionReservada}.
     *
     * @throws Exception propagando cualquier excepci&oacute;n del m&eacute;todo.
     * @noinspection FeatureEnvy
     */
    public void testisIdentificacionReservada() throws Exception
    {
        if (s_log.isDebugEnabled()) s_log.debug("Probando: isIdentificacionReservada");
        Assert.assertFalse(m_pruebame2.isIdentificacionReservada("qwerty", null, enlaceTransaccional));

    }

    /**
     * Realiza pruebas unitarias sobre la operaci&oacute;n {@code activarIdentificacion}.
     *
     * @throws Exception propagando cualquier excepci&oacute;n de la operaci&oacute;n.
     * @noinspection FeatureEnvy
     */
    public void testactivarLogin() throws Exception
    {
        if (s_log.isDebugEnabled()) s_log.debug("Probando: activarIdentificacion");
        final Boolean activado = m_pruebame.activarIdentificacion(s_identificacion, s_autentificacion.toCharArray(), s_activacion, null, enlaceTransaccional);
        assertTrue("No se pudo activar el Identificacion.", activado);

    }


}